package cn.openea.perpartner.meily.web.service;

import cn.openea.perpartner.meily.constant.enums.GoodsTypeEnums;
import cn.openea.perpartner.meily.web.entity.Goods;
import cn.openea.perpartner.meily.web.entity.vo.GoodsVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * (Goods)表服务接口
 *
 * @author Weird077
 * @since 2023-01-11 21:04:18
 */
public interface IGoodsService extends IService<Goods> {

    List<Goods> selectList(GoodsVo vo);

    boolean top(Long goodsId);

    boolean topCancel(Long goodsId);

    String selectCount(GoodsVo vo);

    Goods findByGoodsNo(String goodsNo);

    Goods queryDetails(String goodsNo, String goodsId);

    List<Goods> queryAll(GoodsVo goodsVo);

    boolean shelf(Long goodsId);

    boolean down(Long goodsId);

    String cycle(Long goodsId);

    List<Goods> similar(GoodsVo goodsVo);

    Goods findById(String goodsId);

    List<Goods> selectProductList(GoodsVo vo);

    List<JSONObject> selectProductCategory(String type);

    /**
     * 统计商品的数量，如上架商品数量，下架商品数量，签约商品数量
     *
     * @return Map
     */
    Map<String, Object> goodsStatistics(GoodsVo vo);

    String batchCopyGoods(List<Long> idList);

    /**
     * 获取小程序专区默认显示商品
     *
     * @param goodsTypeEnums 为空查全部
     *                       map {type : list}
     */
    Map<String, List<Goods>> queryZoneShowGoods(GoodsTypeEnums goodsTypeEnums);

    /**
     * 判断两个周期串是否属于同一个周期内
     *
     * @param oldCycleId
     * @param newCycleId
     * @return
     */
    boolean isSameCycle(String oldCycleId, String newCycleId);

    /**
     * 统计商品库不同类型的各种数量
     */
    Map<String, Integer> statisticTypeQuantity(GoodsVo vo);

    /**
     * 统计商品状态的各种数量，如上架数量，未上架数据，置顶数量
     */
    Map<String, Integer> statisticStatusQuantity(GoodsVo vo);

    /**
     * 计算指定企业关联商品数量
     *
     * @param enterpriseNo 企业编号
     * @return Integer
     */
    Integer countGoodsByEnterpriseNo(String enterpriseNo);

    /**
     * 商品关联企业
     * @param id 商品Id
     * @param enterpriseNo 企业编号
     * @param enterpriseName 企业名称
     */
    void relevancyEnterprise(Long id, String enterpriseNo,String enterpriseName);

    /**
     * 获取未关联企业的商品
     * @param vo GoodsVo
     * @return list
     */
    List<Goods> selectUnRelevancyEnterpriseList(GoodsVo vo);

    /**
     * 获取关联置顶企业的商品
     * @param enterpriseNo String
     * @return list
     */
    List<Goods> selectListByEnterpriseNo(String enterpriseNo);

    /**
     * 获取企业关联的品牌
     * @param enterpriseNo String
     * @return list
     */
    List<String> selectBrandListByEnterpriseNo(String enterpriseNo);
}

